import org.xenoserver.control.CommandDomainNew;
import org.xenoserver.control.CommandFailedException;
+import org.xenoserver.control.CommandPhysicalGrant;
import org.xenoserver.control.Defaults;
+import org.xenoserver.control.Mode;
+import org.xenoserver.control.StringPattern;
public class ParseDomainNew extends CommandParser {
public void parse(Defaults d, LinkedList args)
int vifs = getIntParameter(args, 'v', d.domainVIFs);
String bargs = getStringParameter(args, 'a', d.args) + " ";
String root_dev = getStringParameter(args, 'd', d.rootDevice);
+ String usr_dev = getStringParameter(args, 'u', d.usrDevice);
String nfs_root_path = getStringParameter(args, 'f', d.nwNFSRoot);
String nw_ip = getStringParameter(args, '4', d.nwIP);
String nw_gw = getStringParameter(args, 'g', d.nwGateway);
nw_gw,
nw_mask,
nw_nfs_server,
- nw_host);
+ nw_host,
+ usr_dev);
c.execute();
String[] output = c.output();
for (int i = 0; i < output.length; i++) {
System.out.println(output[i]);
}
+
+ if (root_dev.startsWith("/dev/sda") || root_dev.startsWith("/dev/hda")) {
+ String real_root = StringPattern.parse(root_dev).resolve(c.domain_id());
+ String device = real_root.substring(real_root.indexOf('/',1)+1);
+ CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_WRITE,false);
+ String output2 = cg.execute();
+ if ( output2 != null ) {
+ System.out.println(output2);
+ }
+ }
+
+ if (usr_dev != null && (usr_dev.startsWith("/dev/sda")) || usr_dev.startsWith("/dev/hda")) {
+ String real_usr = StringPattern.parse(usr_dev).resolve(c.domain_id());
+ String device = real_usr.substring(real_usr.indexOf('/',1)+1);
+ CommandPhysicalGrant cg = new CommandPhysicalGrant(d,c.domain_id(),device,Mode.READ_ONLY,false);
+ String output2 = cg.execute();
+ if ( output2 != null ) {
+ System.out.println(output2);
+ }
+ }
}
public String getName() {
}
public String getUsage() {
- return "[-n<domain_name>] [-k<size>] [-i<image>] [-v<num_vifs>] [-r<initrd>] [-d<root_device>] [-f<nfs_root>] [-s<nfs_boot_server>] [-4<ipv4_boot_address>] [-g<ipv4_boot_gateway>] [-m<ipv4_boot_netmask>] [-h<hostname>] [-a<args>]";
+ return "[-n<domain_name>] [-k<size>] [-i<image>] [-v<num_vifs>] [-r<initrd>] [-d<root_device>] [-u<usr_device>] [-f<nfs_root>] [-s<nfs_boot_server>] [-4<ipv4_boot_address>] [-g<ipv4_boot_gateway>] [-m<ipv4_boot_netmask>] [-h<hostname>] [-a<args>]";
}
public String getHelpText() {
+ " -v Number of VIFs domain_vifs\n"
+ " -r InitRD (if required) domain_init_rd\n"
+ " -d Root device (e.g /dev/nfs, /dev/hda3) root_device\n"
- + " -a Additional boot parameters\n"
+ + " -u Usr dev/path (e.g /dev/hda3, server:path)usr_device\n"
+ + " -a Additional boot parameters args\n"
+ "\n"
+ "Networking options:\n"
+ " -f NFS root (if /dev/nfs specified) nw_nfs_root\n"
private String bargs;
/** Root device */
private String root_dev;
+ /** Usr device */
+ private String usr_dev;
/** NFS root path */
private String nfs_root_path;
/** IP address */
private String nw_host;
/** Output from domain creation */
private String[] output;
+ /** Domain ID created. */
+ private int domain_id;
/**
* @return Output from domain creation.
public String[] output() {
return output;
}
+
+ /**
+ * @return The domain id this command created.
+ */
+ public int domain_id() {
+ return domain_id;
+ }
/**
* Constructor for CommandDomainNew.
String nw_mask,
String nw_nfs_server,
String nw_host) {
- this.d = d;
- this.name = name;
- this.size = size;
- this.image = image;
- this.initrd = initrd;
- this.vifs = vifs;
- this.bargs = bargs;
- this.root_dev = root_dev;
- this.nfs_root_path = nfs_root_path;
- this.nw_ip = nw_ip;
- this.nw_gw = nw_gw;
- this.nw_mask = nw_mask;
- this.nw_nfs_server = nw_nfs_server;
- this.nw_host = nw_host;
+ this(d,name,size,image,initrd,vifs,bargs,root_dev,nfs_root_path,nw_ip,nw_gw,nw_mask,nw_nfs_server,nw_host,null);
+ }
+
+ public CommandDomainNew(
+ Defaults d,
+ String name,
+ int size,
+ String image,
+ String initrd,
+ int vifs,
+ String bargs,
+ String root_dev,
+ String nfs_root_path,
+ String nw_ip,
+ String nw_gw,
+ String nw_mask,
+ String nw_nfs_server,
+ String nw_host,
+ String usr_dev) {
+ this.d = d;
+ this.name = name;
+ this.size = size;
+ this.image = image;
+ this.initrd = initrd;
+ this.vifs = vifs;
+ this.bargs = bargs;
+ this.root_dev = root_dev;
+ this.nfs_root_path = nfs_root_path;
+ this.nw_ip = nw_ip;
+ this.nw_gw = nw_gw;
+ this.nw_mask = nw_mask;
+ this.nw_nfs_server = nw_nfs_server;
+ this.nw_host = nw_host;
+ this.usr_dev = usr_dev;
}
/**
(bargs
+ " root="
+ StringPattern.parse(root_dev).resolve(domain_id)
- + " ");
+ + " ro ");
}
+
+ if (usr_dev != null && !usr_dev.equals("")) {
+ bargs = bargs + " usr=" + StringPattern.parse(usr_dev).resolve(domain_id) + " ";
+ }
if (vifs > 0) {
domain_ip =
output[5] += vifinit_cmdarray[i] + " ";
}
}
+
+ this.domain_id = domain_id;
return null;
}
public int domainVIFs;
/** Default root device. */
public String rootDevice;
+ /** Default usr device. */
+ public String usrDevice;
/** Default IP address pattern. */
public String nwIP;
/** Default gateway pattern. */
System.out.println(" domainImage " + domainImage);
System.out.println(" domainInitRD " + domainInitRD);
System.out.println(" rootDevice " + rootDevice);
+ System.out.println(" usrDevice " + usrDevice);
System.out.println(" NWIP " + nwIP);
System.out.println(" NWGW " + nwGateway);
System.out.println(" NWMask " + nwMask);
domainVIFs = Integer.parseInt(s);
} else if (lastName.equals("root_device")) {
rootDevice = s;
+ } else if (lastName.equals("usr_device")) {
+ usrDevice = s;
} else if (lastName.equals("nw_ip")) {
nwIP =
expandDefault(